package com.sky.result;

import lombok.Data;

import java.io.Serializable;

/**
 * 后端统一返回结果
 * @param <T>
 */
@Data
public class Result<T> implements Serializable {
    //实现了Serializable接口,这说明它是一个通用的返回结果包装类

    private Integer code; //编码：1成功，0和其它数字为失败
    private String msg; //错误信息
    private T data; //数据

    public static <T> Result<T> success() {
        Result<T> result = new Result<T>();
        result.code = 1;
        return result;
    }

    public static <T> Result<T> success(T object) {
        Result<T> result = new Result<T>();
        result.data = object;
        result.code = 1;
        return result;
    }

    public static <T> Result<T> error(String msg) {
        Result result = new Result();
        result.msg = msg;
        result.code = 0;
        return result;
    }

}
//专业答案：
//这是一个统一响应结果封装类，主要作用如下：
//
//标准化响应结构：
//
//所有接口返回固定格式：状态码（code）、提示信息（msg）、业务数据（data）
//
//符合RESTful API设计规范，便于前端统一处理
//
//泛型设计：
//
//<T> 支持返回任意类型数据对象（如集合/实体类等）
//
//快速构建方法：
//
//success()：无数据成功响应
//
//success(T object)：带数据成功响应
//
//error(String msg)：失败响应
//
//序列化支持：
//
//实现Serializable接口，可支持远程传输或缓存存储
//
//通俗答案：
//这个类相当于给所有接口响应套了一个"标准快递箱"：
//
//三个格子统一包装：
//
//状态格（code）：1=成功（快递签收），0=失败（快递退回）
//
//备注格（msg）：失败时写原因（如"地址填写错误"）
//
//货物格（data）：实际返回的数据（如查询到的订单信息）
//
//使用示例：
//

//// 查询成功返回数据
//return Result.success(orderList); → 前端收到：
//        { code:1, msg:null, data:[{订单1},{订单2}] }
//
//// 删除失败
//        return Result.error("权限不足"); → 前端收到：
//        { code:0, msg:"权限不足", data:null }
//设计优势：
//为什么不用直接返回数据？
//
//前端需要额外判断请求是否成功
//
//        错误时无法携带提示信息
//
//不同开发者的返回格式可能不一致
//
//实际应用流程：
//
//Controller层所有方法返回Result类型
//
//全局异常处理器将异常转换为Result.error()
//
//前端根据code值决定展示data或msg
//
//类似现实场景：所有快递必须使用标准纸箱（防止运输损坏）+ 面单必须填写状态码（方便分拣处理）
//

